package sudoku;

import java.util.HashSet;
import java.util.Set;

public class SudokuEinzelfeld {

	/*
	 * Ein Kaestchen des Sudokufeldes
	 * Kann 10 moegliche Zahlen beinhalten, 0 fuer leer, 1-9
	 * Muss ein Array mit moeglichen Zahlen hinterlegt bekommen
	 * 
	 * Je nach Lage des Feldes muessen die passenden Spalte, Zeile und Block in 
	 * ein Array umgewandelt werden
	 */
	
	private int[] moeglicheZahlenArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	private Set<Integer> moeglicheZahlen = new HashSet<Integer>(); 
	private int actualNumber;
	private Set<Integer> possibleNumbers;
	private int spalte;
	private int zeile;
	private int blockNr;
	private int id;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	private boolean touchedBlock;
	private boolean touchedRow;
	private boolean touchedCol;
	public SudokuSpielfeld zugehoerigesSudokuFeld;
	
	
	/*
	 * Konstruktor eines einzelnen Felds erhaelt bei Beginn als moegliche Zahlen erstmal ALLE Zahlen
	 * Diese sind in der Datenstruktur  sudokuArray gespeichert. 
	 */
	public SudokuEinzelfeld(SudokuSpielfeld feld, int zeile, int spalte, int id){
		for (int i = 0; i < moeglicheZahlenArr.length; i++) {
			moeglicheZahlen.add(moeglicheZahlenArr[i]);
		}
		zugehoerigesSudokuFeld = feld;
		this.zeile=zeile;
		this.id = id;
		this.spalte=spalte;
		possibleNumbers = moeglicheZahlen;
		
	}
	private void setZahl(int number){
		actualNumber=number;
		if(number != 0){
			possibleNumbers.clear();
		}
	}
	public int getNumber() {
		return actualNumber;		
	}
	public Set<Integer> getPossibleNumbers() {
		return possibleNumbers;
	}
	
	public boolean removeNumberFromPossibleNumbers(int number){
		if(possibleNumbers.contains(number)){
			System.out.println("Remove " + number + " from field with id " + this.getId());
		}
		return possibleNumbers.remove(number);
	}
	
	public int getCol() {
		return spalte;
	}
	public void setSpalte(int spalte) {
		this.spalte = spalte;
	}
	public int getRow() {
		return zeile;
	}
	public void setZeile(int zeile) {
		this.zeile = zeile;
	}
	public int getBlockNr() {
		return blockNr;
	}
	public void setBlockNr(int blockNr) {
		this.blockNr = blockNr;
	}
	public boolean isTouchedBlock() {
		return touchedBlock;
	}
	public void setTouchedBlock(boolean touchedBlock) {
		this.touchedBlock = touchedBlock;
	}
	public boolean isTouchedRow() {
		return touchedRow;
	}
	public void setTouchedRow(boolean touchedRow) {
		this.touchedRow = touchedRow;
	}
	public boolean isTouchedCol() {
		return touchedCol;
	}
	public void setTouchedCol(boolean touchedCol) {
		this.touchedCol = touchedCol;
	}
	public void setNumber(int number) {
		setZahl(number);
	}
	
	
	
	
}
